package com.dave.gd.core.util;

import java.util.ArrayList;
import java.util.List;

import com.dave.gd.core.base.entity.IAttrSpec;
import com.dave.gd.core.base.entity.impl.AbstractBaseEntity;
import com.dave.gd.core.context.CacheContext;

public class EntityHelper {
    /**
     * 
     * 方法功能:
     *  获取对象的旧值.
     * @param entity
     * @param attrSpec
     * @return
     * @author: linzq
     * @修改记录： 
     * ==============================================================<br>
     * 日期:2014-12-3 linzq 创建方法，并实现其功能
     * ==============================================================<br>
     */
    public static Object getInitValue(AbstractBaseEntity entity, IAttrSpec attrSpec) {
        Object obj = CacheContext.getEnttFromCache(entity.getClass().getName(), entity.getId());
        if (obj != null && obj instanceof AbstractBaseEntity) {
            AbstractBaseEntity entt = (AbstractBaseEntity) obj;
            return entt.get(attrSpec);
        }
        return null;
    }
    
    /**
     * 
     * 方法功能:
     *  获取属性变化列表.
     * @param newEntity
     * @return
     * @author: linzq
     * @修改记录： 
     * ==============================================================<br>
     * 日期:2014-12-3 linzq 创建方法，并实现其功能
     * ==============================================================<br>
     */
    public static List<AttrStatus> getEnttCompare(AbstractBaseEntity newEntity) {
        List<AttrStatus> list = new ArrayList<AttrStatus>();
        Object obj = CacheContext.getEnttFromCache(newEntity.getClass().getName(),
            newEntity.getId());
        if (obj != null && obj instanceof AbstractBaseEntity) {
            AbstractBaseEntity entt = (AbstractBaseEntity) obj;
            List<IAttrSpec> attrSpecs = entt.getAllAttrSpec();
            for (IAttrSpec attrSpec : attrSpecs) {
                AttrStatus attrStatus = new AttrStatus();
                attrStatus.setAttrSpec(attrSpec);
                attrStatus.setOldValue(entt.get(attrSpec));
                attrStatus.setNewValue(newEntity.get(attrSpec));
                list.add(attrStatus);
            }
        }
        return list;
    }
}
